package com.film.jwt;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;



public class JwtUtil {
    public static String SECRET = "1007b"; //密钥
    public static Map<String,Object> generateToken(String userId, String secret){
        //过期时间
        long EXPIRE=(long)1000*(long)60*(long)60*(long)24*(long)30;
        Map<String,Object> data = new HashMap<>(16);
        Date expiration=new Date(System.currentTimeMillis() + EXPIRE);

        String token = Jwts.builder()
                .setHeaderParam("typ","JWT")//token的类型
                .setHeaderParam("alg","HS256")//加密算法
                .setExpiration(expiration)//过期时间
                .setIssuedAt(new Date())//签名时间，时间戳
                .claim("userId",userId)//主体信息
                .signWith(SignatureAlgorithm.HS256,secret)//使用密钥进行签名加密
                .compact();
        //将token和过期时间返回给用户
        data.put("token",token);
        data.put("expire_time",new SimpleDateFormat("yyyy-MM-dd HH:ss:mm").format(expiration));
        return data;
    }

    public static Claims validateTokenAndGetClaims(String token, String secret){
        Claims claims = Jwts.parser()
                .setSigningKey(secret)//使用密钥对签名进行解密
                .parseClaimsJws(token)//对token进行解析
                .getBody();//获得主体信息
        return claims;
    }

    public static boolean JwtVerify(String token) {
        try {
            validateTokenAndGetClaims(token, SECRET);
        } catch (Exception e) {
            return false;
        }
        return true;
    }
}
